package com.wsc.juc_001.c_001;

/**
 * synchronized 关键字
 * 对某个对象加锁
 * synchronized锁的是对象 而不是代码 ，类似一个上锁的箱子，而object是箱子的锁，每次开箱子的时候需要钥匙，而这个钥匙相当于是验证object对象是否一致
 * 因此不能每次访问带有synchronized锁的不同的object，只能是同一个
 *
 *
 *
 *
 */
public class Synchronized_01 {
    public static int i = 10 ;
    public static Object o = new Object();

    public static void
    method(){//任何线程要执行下面的代码，必须先拿到o的值
        synchronized (o){
            i--;
            System.out.println(Thread.currentThread().getName() + "i = " + i);
        }
    }

//    public static void main(String[] args) {
//        new Thread(()->{
//            for (int i = 0; i <10 ; i++) {
//                try {
//                    Thread.sleep(500);
//                    Synchronized_01.method();
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
//        }).start();
//
//        new Thread(()->{
//            for (int i = 0; i <10 ; i++) {
//                try {
//                    Thread.sleep(500);
//                    Synchronized_01.method();
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
//        }).start();
//    }
}
